package cn.jbolt.ai.resource.function.enums;

import java.util.Arrays;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;

public enum SyncStrategy {
    /**
     * 全量同步，既同步结构也同步描述等信息
     */
    FULL("FULL", "全量同步", "同步所有function资源的结构和描述信息，所有手动修改的描述信息都会失效"),

    /**
     * 同步存量数据的结构数据和完整的增量数据
     */
    INCREMENT("INCREMENT", "增量同步", "只同步存量Function的结构信息和新增Function的全部信息，同时删除失效的Function资源，手动修改的描述信息仍保留");

    private final String code;
    private final String name;
    private final String description; // 描述信息

    SyncStrategy(String code, String name, String description) {
        this.code = code;
        this.name = name;
        this.description = description;
    }

    public String getCode() {
        return code;
    }

    public String getName() {
        return name;
    }

    public String getDescription() {
        return description;
    }

    /**
     * 将枚举转换为所需的列表格式，以便前端使用
     *
     * @return 包含枚举信息的列表
     */
    public static List<Map<String, Object>> list() {
        return Arrays.stream(values())
                .map(strategy -> {
                    Map<String, Object> map = new LinkedHashMap<>();
                    map.put("label", strategy.getName());
                    map.put("key", strategy.getCode());
                    map.put("remark", strategy.getDescription());
                    return map;
                })
                .collect(Collectors.toList());
    }

    // 根据code获取对应的枚举成员
    public static SyncStrategy fromCode(String code) {
        for (SyncStrategy strategy : values()) {
            if (strategy.getCode().equals(code)) {
                return strategy;
            }
        }
        throw new IllegalArgumentException("Unknown sync strategy code: " + code);
    }
}
